/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package adcon.negocio.condomino;

import adcon.negocio.dados.Endereco;
import adcon.negocio.dados.Telefone;
import adcon.negocio.unidade.Unidade;
import br.com.caelum.stella.MessageProducer;
import br.com.caelum.stella.ResourceBundleMessageProducer;
import br.com.caelum.stella.ValidationMessage;
import br.com.caelum.stella.validation.CPFValidator;
import br.com.caelum.stella.validation.InvalidStateException;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
import java.util.ResourceBundle;
import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;

/**
 *
 * @author thiagocifani
 */
@Entity
@NamedQueries(value = {
    @NamedQuery(name = "CondominoPorCondominio", query = "SELECT c FROM Condomino c"),
    @NamedQuery(name = "CondominoPorConselheiro", query = "SELECT c FROM Condomino c")
})
public class Condomino implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE)
    private int codigo;
    private String nome;
    @OneToMany(cascade = CascadeType.ALL)
    private List<Endereco> enderecos = new ArrayList<Endereco>();
    @OneToMany(cascade = CascadeType.ALL)
    private List<Telefone> telefones = new ArrayList<Telefone>();
    private String cpf;
    @OneToOne
    private Unidade unidade;
    private String rg;
    private String email;
    private String contato;
    private String correspondenciaPara;
    private boolean falecido;
    private boolean conselheiro;
    private String numeroConselheiro;
    private String tipoConselheiro;

    public Condomino() {
    }

    public Condomino(Unidade unidade) {
       this.unidade = unidade;
       unidade.setCondomino(this);
    }
    

    public Unidade getUnidade() {
        return unidade;
    }

    public void setUnidade(Unidade unidade) {
        this.unidade = unidade;
    }

    public String getNumeroConselheiro() {
        return numeroConselheiro;
    }

    public void setNumeroConselheiro(String numeroConselheiro) {
        this.numeroConselheiro = numeroConselheiro;
    }

    public String getTipoConselheiro() {
        return tipoConselheiro;
    }

    public void setTipoConselheiro(String tipoConselheiro) {
        this.tipoConselheiro = tipoConselheiro;
    }

    public String getContato() {
        return contato;
    }

    public void setContato(String contato) {
        this.contato = contato;
    }

    public String getCorrespondenciaPara() {
        return correspondenciaPara;
    }

    public void setCorrespondenciaPara(String correspondenciaPara) {
        this.correspondenciaPara = correspondenciaPara;
    }

    public boolean isFalecido() {
        return falecido;
    }

    public void setFalecido(boolean falecido) {
        this.falecido = falecido;
    }

    public int getCodigo() {
        return codigo;
    }

    public void setCodigo(int codigo) {
        this.codigo = codigo;
    }

    public boolean isConselheiro() {
        return conselheiro;
    }

    public void setConselheiro(boolean conselheiro) {
        this.conselheiro = conselheiro;
    }

    public String getCpf() {
        return cpf;
    }

    public void setCpf(String cpf) {
        this.cpf = cpf;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public List<Endereco> getEnderecos() {
        return enderecos;
    }

    public void setEnderecos(List<Endereco> enderecos) {
        this.enderecos = enderecos;
    }

    
    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public String getRg() {
        return rg;
    }

    public void setRg(String rg) {
        this.rg = rg;
    }

    public List<Telefone> getTelefones() {
        return telefones;
    }

    public void setTelefones(List<Telefone> telefones) {
        this.telefones = telefones;
    }

    public void adicionarTelefone(Telefone telefone) {
        telefones.add(telefone);
    }

    public void removerTelefone(Telefone telefone) {
        telefones.remove(telefone);
    }

    public void adicionarEndereco(Endereco endereco) {
        enderecos.add(endereco);
    }

    public void removerEndereco(Endereco endereco) {
        enderecos.remove(endereco);
    }

    public boolean validaCpf(String cpf) {
        ResourceBundle resourceBundle = ResourceBundle.getBundle("StellaValidationMessages", new Locale("pt", "BR"));
        MessageProducer messageProducer = new ResourceBundleMessageProducer(resourceBundle);
        boolean isFormatted = true;
        CPFValidator validator = new CPFValidator(messageProducer, isFormatted);
        try {
            validator.assertValid(cpf);
            return true;
        } catch (InvalidStateException e) {
            for (ValidationMessage message : e.getInvalidMessages()) {
                System.out.println(message.getMessage());
            }
            return false;
        }
    }

    @Override
    public String toString() {
        return nome;
    }
}
